package com.shujia.spark.sql

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

object Demo1SParkSql {

  def main(args: Array[String]): Unit = {

    /**
     * 创建spark 环境
     *
     */
    val spark: SparkSession = SparkSession
      .builder()
      .master("local")
      .appName("sql")
      .config("spark.sql.shuffle.partitions", 1) //指定spark sql shuffle之后rdd的分区数
      .getOrCreate()

    /**
     * 1、读取数据,得到一个DF  (DF比RDD多个表结构)
     */
    val studentDF: DataFrame = spark
      .read
      .format("csv") //指定读取数据的格式
      .option("sep", ",") //指定数据分隔符
      .schema("id STRING ,name STRING , age INT ,gender STRING ,clazz STRING") //指定表结构
      .load("data/students.txt")

    //将df注册成表
    studentDF.createOrReplaceTempView("student")

    /**
     *
     * sql 语法
     * 2、编写sql处理数据
     *
     */
    val clazzNumDF: DataFrame = spark.sql(
      """
        |select
        |clazz ,count(1) as num
        |from
        |student
        |group by clazz
        |""".stripMargin)

    /**
     * 3、保存数据
     */
    clazzNumDF
      .write
      .format("csv") //保存数据的格式
      .option("sep", "\t") //数据的分隔符
      .mode(SaveMode.Overwrite) //覆盖写
      .save("data/clazz_num")


  }

}
